package com.myworkspace.standard.common.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class FreemarkerUtil {
    public static void main(String[] args) {
        test();
    }

    public static void test() {
        try {
//            Class.forName("")


            Map<String, Object> dataMap = new HashMap<String, Object>();
            JSONArray array = new JSONArray();
            JSONArray array2 = new JSONArray();
            JSONObject k = new JSONObject();
            JSONObject j = new JSONObject();
            k.put("columnName", "主键");
            k.put("columnCode", "id");
            k.put("columnType", "bigint");
            k.put("columnSize", "20");
            k.put("columnDefault", "0");
            k.put("columnNull", "yes");
            JSONObject kang = new JSONObject();
            kang.put("columnName", "主键");
            kang.put("columnCode", "id");
            kang.put("columnType", "bigint");
            kang.put("columnSize", "20");
            kang.put("columnDefault", "");
            kang.put("columnNull", "yes");
            array2.add(k);
            array2.add(kang);
            j.put("tableNameStr", "案件表");
            j.put("tableName", "case");
            j.put("cList", array2);
            array.add(j);
            array.add(j);
            dataMap.put("list", array);
            //Configuration 用于读取ftl文件
            //new Configuration()构造方法内是当前依赖的版本号
            Configuration configuration = new Configuration(new Version("2.3.28"));
            configuration.setDefaultEncoding("utf-8");

            /**
             * 指定ftl文件所在目录的路径，而不是ftl文件的路径
             * setClassForTemplateLoading(a,b)
             * a代表某个类加载器,b是ftl文件所在的路径,实在a所在的路径之下
             * 网上查了下有人说可以这么理解
             * 假设a的路径是:org.ql  而ftl在目录org.ql.template下
             * 那么这里需要写为:configuration.setClassForTemplateLoading(a.getClass, "/template下");
             * 但是!!! 我试了不行
             * 所以还是将那个包路径填为空 在后面将ftl文件的相对路径写入
             */
            configuration.setDirectoryForTemplateLoading(new File("/Users/liyang/Desktop"));
            //输出文档路径及名称
            File outFile = new File("/Users/liyang/Desktop/test.doc");

            //以utf-8的编码读取ftl文件
            Template template = configuration.getTemplate("t.ftl", "utf-8");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
            template.process(dataMap, out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
